Imports Leadtools
Imports Leadtools.Dicom
'''
Private Sub DicomDataSet_BeginEditSequenceExample()
' The methods below all return a 'this' pointer so that they can be chained together (a 'fluent' interface)
' BeginEditItem has an index item to allow you to specify which item to edit (defaults to 0).
' BeginReadItem should also have this overload.
'
' Create a DicomDataSet
Dim ds As DicomDataSet = New DicomDataSet()
' ***************************************************
' *** Example 1
' ***************************************************
' Create a sequence with two items
ds.BeginEditSequence(DicomTag.RequestAttributesSequence) _
.BeginEditItem() _
.InsertElementAndSetValue(DicomTag.RequestedProcedureID, "RequestedProcedureID -- first item") _
.InsertElementAndSetValue(DicomTag.ScheduledProcedureStepID, "ScheduledProcedureStepID -- first item") _
.EndEditItem() _
.BeginEditItem() _
.InsertElementAndSetValue(DicomTag.RequestedProcedureID, "RequestedProcedureID -- second item") _
.InsertElementAndSetValue(DicomTag.ScheduledProcedureStepID, "ScheduledProcedureStepID -- second item") _
.EndEditItem() _
.EndEditSequence()
' Now add a third item to the sequence
ds.BeginEditSequence(DicomTag.RequestAttributesSequence) _
.BeginEditItem(2) _
.InsertElementAndSetValue(DicomTag.RequestedProcedureID, "RequestedProcedureID -- third item") _
.InsertElementAndSetValue(DicomTag.ScheduledProcedureStepID, "ScheduledProcedureStepID -- third item") _
.EndEditItem() _
.EndEditSequence()
' Now update the second item in the sequence
ds.BeginEditSequence(DicomTag.RequestAttributesSequence) _
.BeginEditItem(1) _
.InsertElementAndSetValue(DicomTag.RequestedProcedureID, "RequestedProcedureID -- second item updated") _
.InsertElementAndSetValue(DicomTag.ScheduledProcedureStepID, "ScheduledProcedureStepID -- second item updated") _
.EndEditItem() _
.EndEditSequence()
' Read the first item in the sequence
Dim sRequestedProcedureID As String = String.Empty
Dim sScheduledProcedureStepID As String = String.Empty
ds.BeginReadSequence(DicomTag.RequestAttributesSequence) _
.BeginReadItem() _
.GetValue(Of String)(DicomTag.RequestedProcedureID, Nothing, sRequestedProcedureID) _
.GetValue(Of String)(DicomTag.ScheduledProcedureStepID, Nothing, sScheduledProcedureStepID) _
.EndReadItem() _
.EndReadSequence()
' Read the third item in the sequence
sRequestedProcedureID = String.Empty
sScheduledProcedureStepID = String.Empty
ds.BeginReadSequence(DicomTag.RequestAttributesSequence) _
.BeginReadItem(2) _
.GetValue(Of String)(DicomTag.RequestedProcedureID, Nothing, sRequestedProcedureID) _
.GetValue(Of String)(DicomTag.ScheduledProcedureStepID, Nothing, sScheduledProcedureStepID) _
.EndReadItem() _
.EndReadSequence()
' ***************************************************
' *** Example 2
' ***************************************************
' This example creates a sequence inside another sequence
' Add a per-frame functional gropus sequence with two items
ds.BeginEditSequence(DicomTag.PerFrameFunctionalGroupsSequence) _
.BeginEditItem() _
.BeginEditSequence(DicomTag.FrameVOILUTSequence) _
.BeginEditItem() _
.InsertElementAndSetValue(DicomTag.WindowCenter, 32000) _
.InsertElementAndSetValue(DicomTag.WindowWidth, 64000) _
.EndEditItem() _
.BeginEditItem() _
.InsertElementAndSetValue(DicomTag.WindowCenter, 100) _
.InsertElementAndSetValue(DicomTag.WindowWidth, 200) _
.EndEditItem() _
.EndEditSequence() _
.EndEditItem() _
.EndEditSequence()
' Now read the per-frame functional groups sequence with two items
Dim sWindowCenter1 As String = string.Empty
Dim sWindowWidth1 As String = string.Empty
Dim sWindowCenter2 As String = string.Empty
Dim sWindowWidth2 As String = string.Empty
ds.BeginReadSequence(DicomTag.PerFrameFunctionalGroupsSequence) _
.BeginReadItem() _
.BeginReadSequence(DicomTag.FrameVOILUTSequence) _
.BeginReadItem() _
.GetValue(Of String)(DicomTag.WindowCenter, Nothing, sWindowCenter1) _
.GetValue(Of String)(DicomTag.WindowWidth, Nothing, sWindowWidth1) _
.EndReadItem() _
.BeginReadItem() _
.GetValue(Of String)(DicomTag.WindowCenter, Nothing, sWindowCenter2) _
.GetValue(Of String)(DicomTag.WindowWidth, Nothing, sWindowWidth2) _
.EndReadItem() _
.EndReadSequence() _
.EndReadItem() _
.EndReadSequence()
ds.Save(Path.Combine(LEAD_VARS.ImagesDir, "test.dcm"), DicomDataSetSaveFlags.None)
End Sub
Public NotInheritable Class LEAD_VARS
Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
using Leadtools;
using Leadtools.Dicom;
///
private void DicomDataSet_BeginEditSequenceExample()
{
// The methods below all return a 'this' pointer so that they can be chained together (a 'fluent' interface)
// BeginEditItem has an index item to allow you to specify which item to edit (defaults to 0).
// BeginReadItem should also have this overload.
//
// Create a DicomDataSet
DicomDataSet ds = new DicomDataSet();
// ***************************************************
// *** Example 1
// ***************************************************
// Create a sequence with two items
ds.BeginEditSequence(DicomTag.RequestAttributesSequence)
.BeginEditItem()
.InsertElementAndSetValue(DicomTag.RequestedProcedureID, "RequestedProcedureID -- first item")
.InsertElementAndSetValue(DicomTag.ScheduledProcedureStepID, "ScheduledProcedureStepID -- first item")
.EndEditItem()
.BeginEditItem()
.InsertElementAndSetValue(DicomTag.RequestedProcedureID, "RequestedProcedureID -- second item")
.InsertElementAndSetValue(DicomTag.ScheduledProcedureStepID, "ScheduledProcedureStepID -- second item")
.EndEditItem()
.EndEditSequence();
// Now add a third item to the sequence
ds.BeginEditSequence(DicomTag.RequestAttributesSequence)
.BeginEditItem(2)
.InsertElementAndSetValue(DicomTag.RequestedProcedureID, "RequestedProcedureID -- third item")
.InsertElementAndSetValue(DicomTag.ScheduledProcedureStepID, "ScheduledProcedureStepID -- third item")
.EndEditItem()
.EndEditSequence();
// Now update the second item in the sequence
ds.BeginEditSequence(DicomTag.RequestAttributesSequence)
.BeginEditItem(1)
.InsertElementAndSetValue(DicomTag.RequestedProcedureID, "RequestedProcedureID -- second item updated")
.InsertElementAndSetValue(DicomTag.ScheduledProcedureStepID, "ScheduledProcedureStepID -- second item updated")
.EndEditItem()
.EndEditSequence();
// Read the first item in the sequence
string sRequestedProcedureID;
string sScheduledProcedureStepID;
ds.BeginReadSequence(DicomTag.RequestAttributesSequence)
.BeginReadItem()
.GetValue<string>(DicomTag.RequestedProcedureID, null, out sRequestedProcedureID)
.GetValue<string>(DicomTag.ScheduledProcedureStepID, null, out sScheduledProcedureStepID)
.EndReadItem()
.EndReadSequence();
// Read the third item in the sequence
sRequestedProcedureID = string.Empty;
sScheduledProcedureStepID = string.Empty;
ds.BeginReadSequence(DicomTag.RequestAttributesSequence)
.BeginReadItem(2)
.GetValue<string>(DicomTag.RequestedProcedureID, null, out sRequestedProcedureID)
.GetValue<string>(DicomTag.ScheduledProcedureStepID, null, out sScheduledProcedureStepID)
.EndReadItem()
.EndReadSequence();
// ***************************************************
// *** Example 2
// ***************************************************
// This example creates a sequence inside another sequence
// Add a per-frame functional gropus sequence with two items
ds.BeginEditSequence(DicomTag.PerFrameFunctionalGroupsSequence)
.BeginEditItem()
.BeginEditSequence(DicomTag.FrameVOILUTSequence)
.BeginEditItem()
.InsertElementAndSetValue(DicomTag.WindowCenter, 32000)
.InsertElementAndSetValue(DicomTag.WindowWidth, 64000)
.EndEditItem()
.BeginEditItem()
.InsertElementAndSetValue(DicomTag.WindowCenter, 100)
.InsertElementAndSetValue(DicomTag.WindowWidth, 200)
.EndEditItem()
.EndEditSequence()
.EndEditItem()
.EndEditSequence();
// Now read the per-frame functional groups sequence with two items
string sWindowCenter1;
string sWindowWidth1;
string sWindowCenter2;
string sWindowWidth2;
ds.BeginReadSequence(DicomTag.PerFrameFunctionalGroupsSequence)
.BeginReadItem()
.BeginReadSequence(DicomTag.FrameVOILUTSequence)
.BeginReadItem()
.GetValue<string>(DicomTag.WindowCenter, null, out sWindowCenter1)
.GetValue<string>(DicomTag.WindowWidth, null, out sWindowWidth1)
.EndReadItem()
.BeginReadItem()
.GetValue<string>(DicomTag.WindowCenter, null, out sWindowCenter2)
.GetValue<string>(DicomTag.WindowWidth, null, out sWindowWidth2)
.EndReadItem()
.EndReadSequence()
.EndReadItem()
.EndReadSequence();
ds.Save(Path.Combine(LEAD_VARS.ImagesDir, "test.dcm"), DicomDataSetSaveFlags.None);
}
static class LEAD_VARS
{
public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";
}
using Leadtools;
using Leadtools.Dicom;
using Leadtools.Examples;
private void DicomDataSet_BeginEditSequenceExample(Stream outputStream)
{
// The methods below all return a 'this' pointer so that they can be chained together (a 'fluent' interface)
// BeginEditItem has an index item to allow you to specify which item to edit (defaults to 0).
// BeginReadItem should also have this overload.
//
// Create a DicomDataSet
DicomDataSet ds = new DicomDataSet();
// ***************************************************
// *** Example 1
// ***************************************************
// Create a sequence with two items
ds.BeginEditSequence(DicomTag.RequestAttributesSequence)
.BeginEditItem()
.InsertElementAndSetValue(DicomTag.RequestedProcedureID, "RequestedProcedureID -- first item")
.InsertElementAndSetValue(DicomTag.ScheduledProcedureStepID, "ScheduledProcedureStepID -- first item")
.EndEditItem()
.BeginEditItem()
.InsertElementAndSetValue(DicomTag.RequestedProcedureID, "RequestedProcedureID -- second item")
.InsertElementAndSetValue(DicomTag.ScheduledProcedureStepID, "ScheduledProcedureStepID -- second item")
.EndEditItem()
.EndEditSequence();
// Now add a third item to the sequence
ds.BeginEditSequence(DicomTag.RequestAttributesSequence)
.BeginEditItem(2)
.InsertElementAndSetValue(DicomTag.RequestedProcedureID, "RequestedProcedureID -- third item")
.InsertElementAndSetValue(DicomTag.ScheduledProcedureStepID, "ScheduledProcedureStepID -- third item")
.EndEditItem()
.EndEditSequence();
// Now update the second item in the sequence
ds.BeginEditSequence(DicomTag.RequestAttributesSequence)
.BeginEditItem(1)
.InsertElementAndSetValue(DicomTag.RequestedProcedureID, "RequestedProcedureID -- second item updated")
.InsertElementAndSetValue(DicomTag.ScheduledProcedureStepID, "ScheduledProcedureStepID -- second item updated")
.EndEditItem()
.EndEditSequence();
// Read the first item in the sequence
string sRequestedProcedureID;
string sScheduledProcedureStepID;
ds.BeginReadSequence(DicomTag.RequestAttributesSequence)
.BeginReadItem()
.GetValue<string>(DicomTag.RequestedProcedureID, null, out sRequestedProcedureID)
.GetValue<string>(DicomTag.ScheduledProcedureStepID, null, out sScheduledProcedureStepID)
.EndReadItem()
.EndReadSequence();
// Read the third item in the sequence
sRequestedProcedureID = string.Empty;
sScheduledProcedureStepID = string.Empty;
ds.BeginReadSequence(DicomTag.RequestAttributesSequence)
.BeginReadItem(2)
.GetValue<string>(DicomTag.RequestedProcedureID, null, out sRequestedProcedureID)
.GetValue<string>(DicomTag.ScheduledProcedureStepID, null, out sScheduledProcedureStepID)
.EndReadItem()
.EndReadSequence();
// ***************************************************
// *** Example 2
// ***************************************************
// This example creates a sequence inside another sequence
// Add a per-frame functional gropus sequence with two items
ds.BeginEditSequence(DicomTag.PerFrameFunctionalGroupsSequence)
.BeginEditItem()
.BeginEditSequence(DicomTag.FrameVOILUTSequence)
.BeginEditItem()
.InsertElementAndSetValue(DicomTag.WindowCenter, 32000)
.InsertElementAndSetValue(DicomTag.WindowWidth, 64000)
.EndEditItem()
.BeginEditItem()
.InsertElementAndSetValue(DicomTag.WindowCenter, 100)
.InsertElementAndSetValue(DicomTag.WindowWidth, 200)
.EndEditItem()
.EndEditSequence()
.EndEditItem()
.EndEditSequence();
// Now read the per-frame functional groups sequence with two items
string sWindowCenter1;
string sWindowWidth1;
string sWindowCenter2;
string sWindowWidth2;
ds.BeginReadSequence(DicomTag.PerFrameFunctionalGroupsSequence)
.BeginReadItem()
.BeginReadSequence(DicomTag.FrameVOILUTSequence)
.BeginReadItem()
.GetValue<string>(DicomTag.WindowCenter, null, out sWindowCenter1)
.GetValue<string>(DicomTag.WindowWidth, null, out sWindowWidth1)
.EndReadItem()
.BeginReadItem()
.GetValue<string>(DicomTag.WindowCenter, null, out sWindowCenter2)
.GetValue<string>(DicomTag.WindowWidth, null, out sWindowWidth2)
.EndReadItem()
.EndReadSequence()
.EndReadItem()
.EndReadSequence();
ds.Save(outputStream, DicomDataSetSaveFlags.None);
}
Imports Leadtools
Imports Leadtools.Dicom
Private Sub DicomDataSet_BeginEditSequenceExample(ByVal outputStream As Stream)
' The methods below all return a 'this' pointer so that they can be chained together (a 'fluent' interface)
' BeginEditItem has an index item to allow you to specify which item to edit (defaults to 0).
' BeginReadItem should also have this overload.
'
' Create a DicomDataSet
Dim ds As DicomDataSet = New DicomDataSet()
' ***************************************************
' *** Example 1
' ***************************************************
' Create a sequence with two items
With ds.BeginEditSequence(DicomTag.RequestAttributesSequence)
.BeginEditItem()
.InsertElementAndSetValue(DicomTag.RequestedProcedureID, "RequestedProcedureID -- first item")
.InsertElementAndSetValue(DicomTag.ScheduledProcedureStepID, "ScheduledProcedureStepID -- first item")
.EndEditItem()
.BeginEditItem()
.InsertElementAndSetValue(DicomTag.RequestedProcedureID, "RequestedProcedureID -- second item")
.InsertElementAndSetValue(DicomTag.ScheduledProcedureStepID, "ScheduledProcedureStepID -- second item")
.EndEditItem()
.EndEditSequence()
End With
' Now add a third item to the sequence
With ds.BeginEditSequence(DicomTag.RequestAttributesSequence)
.BeginEditItem(2)
.InsertElementAndSetValue(DicomTag.RequestedProcedureID, "RequestedProcedureID -- third item")
.InsertElementAndSetValue(DicomTag.ScheduledProcedureStepID, "ScheduledProcedureStepID -- third item")
.EndEditItem()
.EndEditSequence()
End With
' Now update the second item in the sequence
With ds.BeginEditSequence(DicomTag.RequestAttributesSequence)
.BeginEditItem(1)
.InsertElementAndSetValue(DicomTag.RequestedProcedureID, "RequestedProcedureID -- second item updated")
.InsertElementAndSetValue(DicomTag.ScheduledProcedureStepID, "ScheduledProcedureStepID -- second item updated")
.EndEditItem()
.EndEditSequence()
End With
' Read the first item in the sequence
Dim sRequestedProcedureID As String = String.Empty
Dim sScheduledProcedureStepID As String = String.Empty
With ds.BeginReadSequence(DicomTag.RequestAttributesSequence)
.BeginReadItem()
.GetValue(Of String)(DicomTag.RequestedProcedureID, Nothing, sRequestedProcedureID)
.GetValue(Of String)(DicomTag.ScheduledProcedureStepID, Nothing, sScheduledProcedureStepID)
.EndReadItem()
.EndReadSequence()
End With
' Read the third item in the sequence
sRequestedProcedureID = String.Empty
sScheduledProcedureStepID = String.Empty
With ds.BeginReadSequence(DicomTag.RequestAttributesSequence)
.BeginReadItem(2)
.GetValue(Of String)(DicomTag.RequestedProcedureID, Nothing, sRequestedProcedureID)
.GetValue(Of String)(DicomTag.ScheduledProcedureStepID, Nothing, sScheduledProcedureStepID)
.EndReadItem()
.EndReadSequence()
End With
' ***************************************************
' *** Example 2
' ***************************************************
' This example creates a sequence inside another sequence
' Add a per-frame functional gropus sequence with two items
With ds.BeginEditSequence(DicomTag.PerFrameFunctionalGroupsSequence)
.BeginEditItem()
.BeginEditSequence(DicomTag.FrameVOILUTSequence)
.BeginEditItem()
.InsertElementAndSetValue(DicomTag.WindowCenter, 32000)
.InsertElementAndSetValue(DicomTag.WindowWidth, 64000)
.EndEditItem()
.BeginEditItem()
.InsertElementAndSetValue(DicomTag.WindowCenter, 100)
.InsertElementAndSetValue(DicomTag.WindowWidth, 200)
.EndEditItem()
.EndEditSequence()
.EndEditItem()
.EndEditSequence()
End With
' Now read the per-frame functional groups sequence with two items
Dim sWindowCenter1 As String = String.Empty
Dim sWindowWidth1 As String = String.Empty
Dim sWindowCenter2 As String = String.Empty
Dim sWindowWidth2 As String = String.Empty
With ds.BeginReadSequence(DicomTag.PerFrameFunctionalGroupsSequence)
.BeginReadItem()
.BeginReadSequence(DicomTag.FrameVOILUTSequence)
.BeginReadItem()
.GetValue(Of String)(DicomTag.WindowCenter, Nothing, sWindowCenter1)
.GetValue(Of String)(DicomTag.WindowWidth, Nothing, sWindowWidth1)
.EndReadItem()
.BeginReadItem()
.GetValue(Of String)(DicomTag.WindowCenter, Nothing, sWindowCenter2)
.GetValue(Of String)(DicomTag.WindowWidth, Nothing, sWindowWidth2)
.EndReadItem()
.EndReadSequence()
.EndReadItem()
.EndReadSequence()
End With
ds.Save(outputStream, DicomDataSetSaveFlags.None)
End Sub